// node事件循环模型有六个阶段：

/**
 * 第一阶段：timers（定时器阶段：setTimeout ， setInterval）
 *    1-开始计时
 *    2-执行定时器的回调
 * 
 * 第二阶段：pending callbacks（系统阶段）
 * 
 * 第三阶段：idle，prepare （准备阶段）
 * 
 * 第四阶段：poll（轮询阶段：核心）
 *    1-如果回调队列中有待执行的回调函数，从回调队列中取出回调函数，同步依次执行，
 *      直到回调队列为空，或达到系统最大限度
 *    2-如果回调队列为空，
 *          如果有设置过 setImmediat ，进入下一个check阶段
 *          如果未设置过 setImmediat ， 在此阶段停留，等待回调函数被插入队列
 *          若定时器到点了，则进入下一个check阶段，目的：为了进入下一轮
 *             
 * 第五阶段：check（专门用于执行setImmediat所设置的回调）
 * 
 * 
 * 第六阶段：close callbacks（关闭回调阶段）
 * 
 */

//  process.nextTick() , 紧随主线程之后执行



setImmediate(()=>{
  console.log('setImmediate');
})

process.nextTick(()=>{
  console.log("nextTick");
})

setTimeout(() => {
  console.log('setTimeout');
}, 0);

console.log('main thread');

